package cn.e4j.modular.system.mapper;

import cn.e4j.core.dto.impl.Dto;
import cn.e4j.modular.system.entity.SysTableColumn;
import com.baomidou.mybatisplus.annotation.SqlParser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;

import java.util.List;
import java.util.Map;

/**
 * <p>
 *  表结构 Mapper 接口
 * </p>
 *
 * @author miaoyl
 * @since 2019-10-21
 */
public interface SysTableColumnMapper extends BaseMapper<SysTableColumn> {

    /**
     * 查询列表
     */
    List<Map<String, Object>> getTableList(@Param("page") Page<Object> page, @Param("dto") Dto dto);

    /**
     * 创建表格
     */
    void createTable(@Param("dto") Dto dto);

    /**
     * 添加默认值
     */
    @SqlParser(filter=true)
    void addDefault(@Param("map") Map<String, Object> map);

    /**
     * 添加主键
     */
    void addPrimary(@Param("dto") Dto dto);

    /**
     * 删除表
     */
    void dropTable(@Param("dto") Dto dto);

    /**
     * 根据表名获取字段
     */
    List<Map<String, Object>> getTableData(@Param("dto") Dto dto);

    /**
     * 根据表名获取字段
     */
    List<Map<String, Object>> getOldData(@Param("dto") Dto dto);

    /**
     * 删除默认值
     */
    void dropDefaultValue(@Param("map") Map<String, Object> map);

    /**
     * 删除字段
     */
    void dropColumn(@Param("map") Map<String, Object> map);

    /**
     * 修改字段
     */
    void editColumn(@Param("map") Map<String, Object> map);

    /**
     * 修改字段id
     */
    void editColumnID(@Param("map") Map<String, Object> map);

    /**
     * 新增字段
     */
    @SqlParser(filter=true)
    void addColumn(@Param("map") Map<String, Object> map);

    void dropKey(@Param("dto") Dto dto);

    Dto getTableCount(@Param("dto") Dto dto);

    @SqlParser(filter=true)
    List<Map<String, Object>> getDefaultKey(@Param("dto") Dto dto);

    /**
     * 添加表注释
     */
    @SqlParser(filter=true)
    void addTableName(@Param("map") Map<String, Object> map);

    /**
     * 修改表注释
     */
    @SqlParser(filter=true)
    void editTableName(@Param("map") Map<String, Object> map);

    /**
     * 添加字段注释
     */
    void addColumnName(@Param("map") Map<String, Object> map);

    /**
     * 修改字段注释
     */
    @SqlParser(filter=true)
    void editColumnName(@Param("map") Map<String, Object> map);

    /**
     * 删除字段注释
     */
    @SqlParser(filter=true)
    void dropColumnName(@Param("map") Map<String, Object> map);


    /**
     * 创建表格(Oracle)
     */
    void createTableO(@Param("dto") Dto dto);

    /**
     * 添加表注释(Oracle)
     */
    void addTableNameO(@Param("map") Map<String, Object> map);

    /**
     * 添加字段注释(Oracle)
     */
    @SqlParser(filter=true)
    void addColumnNameO(@Param("map") Map<String, Object> map);

    /**
     * 新增字段(Oracle)
     */
    @SqlParser(filter=true)
    void addColumnO(@Param("map") Map<String, Object> map);

    /**
     * 修改字段id(Oracle)
     */
    @SqlParser(filter=true)
    void editColumnIDO(@Param("map") Map<String, Object> map);

    /**
     * 修改字段(Oracle)
     */
    @SqlParser(filter=true)
    void editColumnO(@Param("map") Map<String, Object> map);

    @SqlParser(filter=true)
    void dropKeyO(@Param("dto") Dto dto);
}
